#ifndef CUSTOMMOVESERVER_H
#define CUSTOMMOVESERVER_H
#include <string>

enum E_CUSTOM_COMMAND
{
    E_CUSTOM_COMMAND_NONE=0,
    E_CUSTOM_COMMAND_SPEED=1,
    E_CUSTOM_COMMAND_POSITION=2,
};
struct CustomCommandInfo
{
    E_CUSTOM_COMMAND commandType;//命令类型
    double rotateAcc;//deg/s^2 旋转加速度
    double lineAcc;//m/s^2 平移加速度
    double vel_command_x;//m/s 速度命令ｘ
    double vel_command_y;//m/s 速度命令y
    double vel_command_r;//deg/s 速度命令r
    double pos_command_x;//m 位置命令ｘ，增量运动。
    double pos_command_y;//m 位置命令y，增量运动。
    double pos_command_r;//deg 位置命令r，增量运动。
    bool isCustomMoveFinished;//本次客户运动过程是否结束
    bool isStop;//是否停止运动
    std::string passWord;//校验密码
};

struct CurrentVehicleInfo
{
    E_CUSTOM_COMMAND commandType;//命令类型，正在处理的
    double rotateAcc;//deg/s^2 旋转加速度
    double lineAcc;//m/s^2 平移加速度
    double vel_command_x;//m/s 速度反馈ｘ
    double vel_command_y;//m/s 速度反馈y
    double vel_command_r;//deg/s 速度反馈r
    double pos_command_x;//m 位置反馈。绝对位置
    double pos_command_y;//m 位置反馈。绝对位置
    double pos_command_r;//deg 位置反馈。绝对位置
    bool isCustomMoveFinished;//本次客户运动过程是否结束
    bool isStop;//是否停止运动
    std::string passWord;//校验密码
};

class CustomMoveServer
{
public:
    CustomMoveServer();

public:
    /**
     * @brief getCustomCommandParameter 获取客户要求的命令信息
     * @param infoOut
     * @return
     */
    int getCustomCommandParameter(CustomCommandInfo &infoOut);
    /**
     * @brief setCurrentVehicleInfo 反馈当前车的状态给客户程序
     * @param infoIn
     * @return
     */
    int setCurrentVehicleInfo(CurrentVehicleInfo infoIn);


};

#endif // CUSTOMMOVESERVER_H
